
/*
 * 定义最高命名空间
 */
var aeroui;
// 单例
if( typeof(aeroui)=='undefined' ){
	aeroui = {};
}

aeroui.grid = {};
/*
 * 项目开发中js的相关常量 
 */
aeroui.constant = {
	/* 验证异常 */
	validateException : 'validateException',
	/* 文本超过多长时，进行省略显示 */
	text_overflow : 50 ,
	/*名称超过多长时进行省略显示*/
	name_text_overflow:20,
	/* 不能录入的字符 */
	errorChar : ['%' , '\'' , '&'],
	/* 能传到服务器，但是要转义的字符 */
	specialChar : [ ]
};

aeroui.constant.specialChar['&']='%26';
aeroui.constant.specialChar['%']='%25';
aeroui.constant.specialChar['#']='%23';
aeroui.constant.specialChar['+']='%2B';
aeroui.constant.specialChar['-']='%2D';
aeroui.constant.specialChar['*']='%2A';

/*
 * 修改关于菜单的样式
 */
$(document).ready(function(){
	// 对每一个主菜单项进行鼠标的动作处理
	$('.main_menu').each(function(){
		// 在mouseover时添加一个css样式
		$(this).mouseover(function(){
			$(this).addClass('main_menu_mouse_over');
		});
		// 在mouseout时remove一个css样式
		$(this).mouseout(function(){
			$(this).removeClass('main_menu_mouse_over');
		});
	});
	/* 处理下方内容的height */
	$('.system_content').css({
		height : ( document.body.clientHeight + $('.function_menu').height() + $('.logo_system_menu').height() - 180 ) + 'px'
	});
	
	/*
	 * table的td把class设置为edit之后就可以编辑的方法
	 */
	tableCellEdit();
  	
  	/*
  	 * table的隔行变色与mouse滑过变色
  	 */
  	setGridCss();
  	/*
  	 * table的隔行变色
  	 */
  	setGridOddEvenCss();
  	/**
	 * 超过某个数值的字符之后省略显示
	 */
  	text_overflow();
  	
});

/**
 * 超过某个数值的字符之后省略显示
 */
function text_overflow( len ){
	var _length = aeroui.constant.text_overflow;
	if( typeof( len )!="undefined" ){
		_length = len;
	}
	
	if( /^[-+]?[1-9]\d*$|^0$/.test( _length ) ){
		     _length=parseInt(_length);
			 $( '.text_overflow' ).each( function(){
				var txt = $( this ).text();
				// 如果大于某一个长度时就进行省略显示
				if( txt.length > _length ){
					$( this ).text( txt.substring(0, _length )+'...' );
				}
			} );	
	    }else{
	    	window.alert( '请输入正确的整数' );
	    }	
}
/**
 * 超过某个数值的字符之后省略显示
 */
function name_text_overflow( len ){
	var _length = aeroui.constant.name_text_overflow;
	if( typeof( len )!="undefined" ){
		_length = len;
	}
	
	if( /^[-+]?[1-9]\d*$|^0$/.test( _length ) ){
		     _length=parseInt(_length);
			 $( '.name_text_overflow' ).each( function(){
				var txt = $( this ).text();
				// 如果大于某一个长度时就进行省略显示
				if( txt.length > _length ){
					$( this ).text( txt.substring(0, _length )+'...' );
				}
			} );	
	    }else{
	    	window.alert( '请输入正确的整数' );
	    }	
}
/**
 * 超过某个数值的字符之后省略显示
 */
function text_overflow_property(){
	var  customSize=aeroui.constant.text_overflow;
    if(arguments.length==1){
        customSize=arguments[0];
	    if( /^[-+]?[1-9]\d*$|^0$/.test( customSize ) ){
		     customSize=parseInt(customSize);
			 $("td[overflow='overflow']" ).each( function(){
				var txt = $( this ).text();
				// 如果大于某一个长度时就进行省略显示
				if( txt.length > customSize ){
					$( this ).text( txt.substring(0, customSize )+'...' );
				}
			} );	
	    }else{
	    	return ;
	    }
    }else{
			 $("td[overflow='overflow']" ).each( function(){
				var txt = $( this ).text();
				// 如果大于某一个长度时就进行省略显示
				if( txt.length > aeroui.constant.text_overflow ){
					$( this ).text( txt.substring(0, aeroui.constant.text_overflow )+'...' );
				}
			} );	
    }
}
/*
 * table的mouse滑过变色
 */
function setGridCss(){
	$('.mytbody tr').bind('mouseover' , setGridMouseoverCss);
	$('.mytbody tr').bind('mouseout' , setGridMouseoutCss);
}
/*
 * table mouse滑过的样式
 */
function setGridMouseoverCss(){
	aeroui.grid.color = $(this).css('backgroundColor');
	$(this).css({
		backgroundColor: '#FFFFE6'
	});
}
/*
 * table mouse 滑出的样式
 */
function setGridMouseoutCss(){
	$(this).css({
		backgroundColor: aeroui.grid.color
	});
}
/*
 * table的隔行变色
 */
function setGridOddEvenCss(){
	$('.mytbody > tr:odd').css({ 
   	 	backgroundColor: '#E3EFFD'
    });
    $('.mytbody > tr:even').css({
    	backgroundColor: '#ffffff'
    });
}
/**
 * 运行时设置table的css样式
 */
function setGridCssInRun(){
	setGridOddEvenCss();
	setGridCss();
}

/*
 * @author wg
 * @param divId 容器的id，要被更新的div
 * @param _url 请求的url
 * @param callBack 加载完成之后的回调函数
 */
function loadContent(div , _url , callBack){
	var _div = document.getElementById(div);
	if( _url.indexOf('?')!=-1 ){
		_url += '&temp='+Math.random();
	}else{
		_url += '?temp='+Math.random();
	}
	var __url = parseURL( _url );
	try{
		$.ajax({
			url : __url.URL,
			type : 'POST',
			cache : false,
			dataType : 'html',
			data : __url.args,
			success : function(result){
				$( _div ).html(result);
				if( typeof( callBack )!='undefined' && callBack.constructor == Function ){
					callBack( result );
				}
			},
			error : function(result){
				window.alert( '操作失败' );
			}
		});
	}catch(e){
		alert(e);
	}
}
/*
 * @author wg
 * @param divId 容器的id，要被更新的div
 * @param _url 请求的url
 * @param data 发送到服务器的数据  格式 "name=John&location=Boston",
 * @param callBack 加载完成之后的回调函数
 */
function loadContentForBigData(div , _url ,data, callBack){
	var _div = document.getElementById(div);
	if( _url.indexOf('?')!=-1 ){
		_url += '&temp='+Math.random();
	}else{
		_url += '?temp='+Math.random();
	}
	try{
		$.ajax({
			url : encodeURI( _url ),
			type : 'POST',
			cache : false,
			data : data,					
			dataType : 'html',
			success : function(result){
				$( _div ).html(result);
				if( typeof( callBack )!='undefined' && callBack.constructor == Function ){
					callBack();
				}
			},
			error : function(result){
				window.alert( '操作失败' );
			}
		});
	}catch(e){
		alert(e);
	}
}
/**
 * 跳转
 * @param _url 地址
 */
function loadContentLink(_url){
	if(_url.indexOf('?')>-1){
		_url+="&temp="+Math.random();
	}else{
		_url+="?temp="+Math.random();
	}
	window.location.href = encodeURI(_url);
}

/* 取出当前window的width */
function pageWidth() {
  return window.innerWidth != null ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;
}

/* 取出当前window的height */
function pageHeight() {
  return window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
}

/* 取出当前window的上边位置 */
function topPosition() {
  return typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;
}

/* 取出当前window的左边位置 */
function leftPosition() {
  return typeof window.pageXOffset != 'undefined' ? window.pageXOffset : document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;
}

/*
 * 弹出模式窗口
 * 
 */
aeroui.popUpWin=0;
function popUpWindow(URLStr, left, top, width, height)
{
  if(aeroui.popUpWin)
  {
    if(!aeroui.popUpWin.closed) aeroui.popUpWin.close();
  }
  aeroui.popUpWin = showModalDialog(encodeURI(URLStr),'popUpWin','dialogHeight:'+height+'px;dialogWidth:'+width+'px;center:yes;resizable:no;scroll:no');
}

/* 关闭当前窗口 ，此法只对ie有效 */
function system_close(){
	window.close();
}

/*
 * 把所有本来没有hide的select给hide掉
 * 
 */
//aeroui.hideSelect = [];
function hideSelect(){
	// 取出所有可见的select 动态扩展exclude属性设置为 true 排除不被隐藏的select组件 
//	$( 'select' ).each( function(){
//		if( $( this ).css( 'display' ) != 'none' && $( this ).css( 'visibility' ) != 'hidden' && $( this ).attr( 'exclude' ) != 'true' ){
//			$( this ).css( {
//				visibility : 'hidden'
//			} );
//			aeroui.hideSelect.push( $(this) );
//		}
//	} );
}
/*
 * 显示由上一步操作而隐藏的下拉框
 */
function showSelect(){
//	$( aeroui.hideSelect ).each( function(){
//		$(this).css( {
//			visibility : 'visible' 
//		} );
//	} );
//	aeroui.hideSelect = [];
}

/* 取前兄弟节点 */
_getPrevious = function(node){
	do{
		node = node.previousSibling;
	}while(node && node.nodeType!=1);
	return node;
};
/* 取后兄弟节点 */
_getNext = function(node){
	do{
		node = node.nextSibling;
	}while(node && node.nodeType!=1);
	return node;
};
/* 取第一个子节点 */
_getFirstChild = function(node){
	node = node.firstChild;
	if( null == node ){
		return null;
	}
	return node!=null && node.nodeType==1 ? node : _getNext(node);
};
/* 取最后一个子节点 */
_getLastChild = function(node){
	node = node.lastChild;
	return node!=null && node.nodeType==1?node:_getPrevious(node);
};
/* 取父辈节点 */
_getParent = function(node,level){
	var lev = level || 1;
	for(var i=0;i<lev;i++){
		node = node.parentNode;
	}
	return node;
};
/* 取出所有的父辈节点 */
var __parents = new Array();
_getAllParent = function(ele){
	ele = ele.parentNode;
	if(ele){
		__parents.push(ele);
		_getAllParent(ele);
	}
	return __parents;
};
/* 判断a元素是否是b元素的父辈 */
_isParent = function(child,parent){
	if(parent==null || child==null){return;}
	__parents.removeAll();
	var ps = _getAllParent(child);
	var isparent = false;
	for(var i=0;i<ps.length;i++){
		if(ps[i].id==parent.id){
			isparent = true;
			break;
		}
	}
	return isparent;
}
/* 取所有的非空格与非回车子节点 */
_getChilds = function(dom){
	var __childs = new Array();
	var ns = dom.childNodes;
	for(var i=0;i<ns.length;i++){
		if(ns[i].nodeType==1){
			__childs.push(ns[i]);
		}
	}
	return __childs;
};
/* 取出最后一代子孙节点  */

/* 取元素x轴的位置 */
_getXPos = function(ele){
	return ele.offsetParent?ele.offsetLeft+_getXPos(ele.offsetParent):ele.offsetLeft;
};
/* 取元素y轴的位置 */
_getYPos = function(ele){
	return ele.offsetParent?ele.offsetTop+_getYPos(ele.offsetParent):ele.offsetTop;
};
/* 取元素xy轴的位置 */
_getXYPos = function(ele){
	return {x:_getXPos(ele),y:_getYPos(ele)};
};
/* 取元素的文本内容 */
_getText = function(ele){
	var t = '';
	ele = ele.childNodes || ele;
	for(var j=0;j<ele.length;j++){
		t += ele[j].nodeType!=1?ele[j].nodeValue:_getText(ele[j].childNodes);
	}
	return t;
};
 /* 判断浏览器 */
 _isIE = function()
 {
 	var browserName = window.navigator.appName;
 	if(browserName==="Microsoft Internet Explorer")
		{
			return true;
		}
		return false;
 };
/* 取元素的css属性 */
_getElementStyle = function(node)
{
	if(node == null){
		return null;
	}
	if( document.all ){
		return node.currentStyle;
	}else{
		return document.defaultView.getComputedStyle(node,null);
	}
};
/* 取元素的css值 */
_getStyle = function( elem , name ){
	if( elem.style[name] ){
		return elem.style[name];
	}else if( elem.currentStyle ){
		return elem.currentStyle[name];
	}else if( document.defaultView && document.defaultView.getComputedStyle ){
		name = name.replace( /([A-Z])/g , '-$1' );
		name = name.toLowerCase();
		var sty = document.defaultView.getComputedStyle( elem , '' );
		return sty && sty.getPropertyValue( name );
	}else{
		return null;
	}
}
 /* 获取mouse的position */
 _getMousePosition = function(event)
 {
 	var ev = event || window.event;
 	if(ev.pageX || ev.pageY)
 	{
 		return {x:ev.pageX , y:ev.pageY};
 	}else
 	{
 		return {
 			x:ev.clientX + document.body.scrollLeft - document.body.clientLeft , 
 			y:ev.clientY + document.body.scrollTop - document.body.clientTop
 		};
 	}
 };
 /* 配置模糊效果 */
 _configElementFilter = function(ele , level)
 {
 	if(ele!==null)
 	{
	 	if(_isIE())
	 	{
	 		ele.style.filter = "progid:DXImageTransform.Microsoft.Alpha (opacity='"+level+"')";
	 	}else
	 	{
	 		ele.style.opacity = level/100;
	 	}
 	}
 };
 /* 元素的事件绑定机制 */
 _attachEvent = function(eventType , fun , element){
 	if(eventType != null && fun != null && element != null)
 	{
 		if(_isIE())
 		{
 			element.attachEvent('on' + eventType , fun);
 		}else
 		{
 			element.addEventListener(eventType , fun , false);
 		}
 	}
 };
 /* 清空数组 */
 Array.prototype.removeAll = function(){
 	var len = this.length;
 	for(var i=0;i<len;i++){
 		this.pop();
 	}
 }
 /* 数组中的每个元素都进行的相同操作 */
 Array.prototype.doEach = function(fun){
 	var ns = this;
 	for(var i=0;i<ns.length;i++){
 		fun.call(ns[i],ns[i]);
 	}
 }
 /*
  * 取出元素在当前数据中的位置
  * @param elem 数据中的元素
  */
 Array.prototype.indexOf = function( elem ){
 	var result = -1;
 	for(var i=0;i<this.length;i++){
 		if( this[i] == elem ){
 			result = i;
 			break;
 		}
 	}
 	return result;
 }
 /* 删除一个元素的所有文本子节点 */
 function removeChildTxtNode( elem ){
 	var child = elem.childNodes;
 	for( var i=0;i<child.length;i++ ){
 		if( child[i].nodeType == 3 ){
 			$( child[i] ).remove();
 		}
 	}
 }
 
 /* 
  * 取出指定类型的节点
  * elem 父节点
  * nodeName 什么类型的节点，比如 input
  * attrs 是一个数组，如下格式attrs['type']='text'此节点是什么类型  比如type="text" 
  * 
  */
 function getChildByType( elem , nodeName , attrs ){
 	var child = _getChilds( elem );
 	var chs = new Array();
 	// 判断类型
 	for ( var i=0;i<child.length;i++ ){
 		if( child[i].nodeName == nodeName.toUpperCase( ) ){
 			// 判断属性
 			for( var attr in attrs ){
		 		if( child[i][attr] == attrs[attr] ){
		 			chs.push( child[i] );
		 		}
		 	}
 		}
 	}
 	return chs;
 }
 /*
  * 向数组中添加元素
  * @param elem 要添加的元素
  * @param check 如果为true就是要检查数组中是否存在了此元素，如果存在了就不再添加，如果不存在就添加
  * 		如果为false就不检查数组中是否存在了此元素，无论是否存在都添加到数组
  * @return 如果添加到数组就返回true，如果没有添加到数组就返回false
  */
 Array.prototype.append = function( elem , check ){
 	var _check;
 	if( typeof( check ) == 'undefined'){
 		_check = false;
 	}else{
 		_check = check;
 	}
 	// 如果要进行验证
 	if( _check ){
 		// 如果返回为-1就表示数组中没有此元素，
 		if( this.indexOf( elem ) == -1 ){
 			this.push( elem );
 			return true;
 		}else{
 			return false;
 		}
 	// 如果不进行验证
 	}else{
 		this.push( elem );
 		return true;
 	}
 }
 /* 删除数据中的元素 */
 Array.prototype.remove = function( elem ){
 	// 判断是否存在此元素
 	if( this.indexOf( elem )!=-1 ){
 		// 把此元素赋为null
 		this[ this.indexOf( elem ) ] = null;
 	}
 }

  /* 删除数组中以此开头的元素 */
 Array.prototype.removeStartWith = function( start ){
 	var arr = new Array();
 	// ie下string不能自动转化为数组  
 	start = start.split("");
 	for( var i=0;i<start.length;i++ ){
 		arr.push( '['+ start[i] +']' );
 	}
	// 以此开头的正则表达式
	var pattern = '^'+ arr.join('') +'[.]*';
	var regex = new RegExp( pattern );
 	for( var i=0;i<this.length;i++ ){
 		if( regex.test( this[i] ) ){
 			delete this[i];
 		}
 	}
 }
 
 /* 清除数组中的null与“”元素 */
 Array.prototype.clearNull = function(){
 	var arr = new Array();
 	for( var i=0;i<this.length;i++ ){
 		if( this[i]!=null && this[i]!='' ){
 			arr.push( this[i] );
 		}
 	}
 	return arr;
 }
 /* 把一个数组合并到此数组中 */
 Array.prototype.addAll = function( arr ){
 	for( var i=0;i<arr.length;i++ ){
 		this.push( arr[i] );
 	}
 }
 /* 替换所有 */
 String.prototype.replaceAll = function(pattern , repla){
 	var regex = new RegExp( pattern , 'g' );
 	return this.replace( regex , repla );
 }
 
 /*
  * 当点击table的tr时，得到被点击的tr的实例
  * 在想在调用的tr之上绑定click或dbclick方法如下
  * <tr onclick="selectTr( this )">
  * 	<td></td>
  * </tr>
  * 调用此方法之后aeroui.grid.selectTr中保存的就是被点击行的对象
  * var _tr = aeroui.grid.selectTr 
  * _tr就为当前点击的行
  */
aeroui.grid.selectTr = null;
function selectTr( tr ){
	setGridOddEvenCss();
	$( aeroui.grid.selectTr ).bind('mouseover' , setGridMouseoverCss);
	$( aeroui.grid.selectTr ).bind('mouseout' , setGridMouseoutCss);
	aeroui.grid.selectTr = tr;
	$( aeroui.grid.selectTr ).unbind('mouseover' , setGridMouseoverCss);
	$( aeroui.grid.selectTr ).unbind('mouseout' , setGridMouseoutCss);
	$( aeroui.grid.selectTr ).css( {
		backgroundColor : '#A3B7E8'
	} );
}
/*
 * 初始化时，把所有td的class为edit的td变为可编辑的
 * DOM节点示例:
 * <table>
 * 	<tr id="ttt">
 * 		<td class="edit">asdfasd</td>
 * 		<td class="edit">asdfa</td>
 * 		<td class="edit">asdf</td>
 * 		<td class="edit">ssssssssss</td>
 * 		<td class="edit">sssddddddd</td>
 * 	</tr>
 * </table>
 * 在此处中的编辑方法的情况，如下使用:
 * tableCellEdit( function( beforeVal , oldVal ){
 * 		alert( this.id + "\t" + beforeVal + "\t" + oldVal );
 * 		return true;
 * 	} );
 * beforeVal表示修改之前的值
 * oldVal表示修改之后的值
 * 方法中的this是指正在编辑的td对象
 * 如果返回值为true，就确认修改
 * 如果返回值为false，就取消修改
 */
function tableCellEdit( endEdit ){
	$('.edit').each(function(){
  		$(this).dblclick(function(){
  			// 属性集合
  			var attrs = new Array();
  			// map
  			attrs['type']='text';
  			// 取出指定类型的子节点
  			var childs = getChildByType( this , 'input' , attrs );
  			// 是否已处于edit的状态 
  			var isedit = false;
  			for( var i=0;i<childs.length;i++ ){
  				if( $( childs[i] ).attr( 'class' )=='td_input_edit' ){
  					isedit = true;
  					break;
  				}
  			}
  			// 如果处于edit状态就返回
  			if( isedit ){ return; }
  			var valBefore = $.trim( $(this).text() );
  			var input = document.createElement('input');
  			// 设置此input的class
  			$( input ).attr( 'class' , 'td_input_edit' )
  			$( input ).css( {
  				border : '1px dotted khaki',
  				width : '80%',
  				padding: '0 4px',
				margin: '0 4px',
				background: 'transparent'
  			} );
  			input.value = valBefore;
  			// 删除所有文本节点
  			removeChildTxtNode( this );
  			$(this).append(input);
  			$(input).select();
  			var that = this;
  			$(input).blur(function(){
  				var val = $(this).val();
  				// 修改是否成功
  				var modify = false;
  				// 失去焦点的回调方法 
  				if( typeof( endEdit )!='undefined' && endEdit.constructor == Function ){
  					// 切换此方法的上下文，把上下文切换为正在编辑的对象的父节点，也就是td的父节点tr
  					// 返回修改成功之后的结果 , 如果为true就表示确认修改，如果false就表示取消修改
  					modify = endEdit.call( that , valBefore , val );
  				}
  				var txt = null;
  				// 如果修改不成功 , 取消修改
  				if( !modify ){
  					txt = document.createTextNode( valBefore );
  				// 如果修改成功了，就确认修改
  				}else{
  					txt = document.createTextNode(val);
  				}
  				$( $(this).context.parentNode ).append(txt);
  				$(this).remove();
  			});
  		});
  	});
}

function inFstop(e){ 
    if(e.stopPropagation) return e.stopPropagation(); 
    else return e.cancelBubble=true;             
}

function inFabort(e){ 
    if(e.preventDefault) return e.preventDefault(); 
    else return e.returnValue=false; 
} 

/**
 * 关于ajax修改单元格的js方法
 * 所有class为ajaxEdit的单元格为可修改的
 * @param condition 是一个包含多个参数的对象
 * condition = {
 * 	url : 'url',   // 后台请求的地址
 * 	idPosition : 'td',  // 主键所有位置 如果td就取td的id，如果为tr就取tr的id
 * 	idName : 'id',  // 后台接收id的名 
 * 	argName : 'name',   // 后台接收参数的名
 * 	className : 'ajaxEdit',  // 设置要修改的className
 * 	ready : readyCallBack, // 提交之前的准备工作
 * 			readyCallBack的返回值为
 * 				{
 * 					edit : true,
 * 					args : name="asdfa"&desc="asd"
 * 				}
 * 	success : successCallBack  // 修改成功之后的回调方法,
 * 	fail : failCallBack // 失败之后的回调方法
 * 	noModify : noModify // 只是双击了一下没有进行修改的回调方法
 * 	validate : validate // 用于在输入信息之后 ， input text blur时对text的信息进行validate
 * 		此方法的上下文为input 
 * 		如果验证没有通过就在其父项上调tooltips的提示
 * 		return true 操作继续
 * 		return false 不再提交，但把text的数据放到td中，text remove
 * }
 */
function editCellAjax( condition ){
	// 如果没有参数就返回
	if( typeof( condition )=='undefined' ){
		return;
	}
	// 生成修改的控件
	$( '.'+condition.className ).each( function(){
		$( this ).dblclick( ajaxEditcell );
	} );
	 function ajaxEditcell(){
		// 判断此单元格是否已处于编辑状态了
		// 是否已修改于编辑状态是按此元素的子节点中是否存在可编辑的文本来进行判断的
		// 属性集合
		var attrs = new Array();
		// map
		attrs['type']='text';
		// 取出指定类型的子节点
		var childs = getChildByType( this , 'input' , attrs );
		// 是否已处于edit的状态 
		var isedit = false;
		for( var i=0;i<childs.length;i++ ){
			if( $( childs[i] ).attr( 'class' )=='td_input_edit' ){
				isedit = true;
				break;
			}
		}
		// 记录td的上下文
		var that = this;
		// 调用准备的方法
		// 准备过程中提供的参数
		var readyArgs = '';
		if( typeof( condition.ready )!='undefined' && null != condition.ready && condition.ready.constructor == Function ){
			var _ready = condition.ready.call( that );
			// 判断是否继续
			if( !_ready.edit ){
				return;
			}
			if( _ready.args != '' ){
				readyArgs = '&' + _ready.args;
			}
		}
		// 如果处于edit状态就返回
		if( isedit ){ return; }
		// 如果不处于edit状态就继续向下执行
		var valBefore = $.trim( $(this).text() );
		var input = document.createElement('input');
		// 设置此input的class
		$( input ).attr( 'class' , 'td_input_edit' )
		$( input ).css( {
			border : '1px dotted khaki',
			width : '80%',
			padding: '0px',
			margin: '0px',
			background: 'transparent'
		} );
		// 初始化input的值为td的值
		input.value = valBefore;
		// 删除所有文本节点
		removeChildTxtNode( this );
		// 添加所有的文本节点
		this.appendChild( input );
		$(input).select();
		// 处理input的blur事件
		$( input ).blur( function(){
			// 取出修改之后新值
			var newVal = $( this ).val();
			// 调用最值的验证方法
			if( typeof( condition.validate )!='undefined' 
					&& null != condition.validate 
					&& condition.validate.constructor == Function ){
				var _validate = condition.validate.call( this);
				// 如果没有通过，就把input text remove 设置td 的tooltips
				if( !_validate ){
					$( that ).append( document.createTextNode( $.trim( newVal ) ) );
					$( this ).remove();
					return;
				}
			}
			// 如果新值与旧值相等就不再后台保存 , 把值还原
			if( $.trim( valBefore ) == $.trim( newVal ) ){
				$( that ).append( document.createTextNode( $.trim( newVal ) ) );
				$( this ).remove();
				if( typeof( condition.noModify )!='undefined' 
					&& null != condition.noModify 
					&& condition.noModify.constructor == Function ){
					condition.noModify.call( that );
				}
			// 如果新值与旧值不相同就发送到后台 , 如果保存成功就设置为新值 , 反之就设置为旧值
			}else{
				// 取出要向后台发送的url
				var _url = parseURL( condition.url );
				// 判断主键所有位置 , 默认为tr
				var idPos = 'tr';
				if( condition.idPosition == 'td' ){
					idPos = 'td';
				}
				// 后台id对应的名
				var idArgs = "";
				if( idPos == 'tr' ){
					// 在tr中取出id
					idArgs = condition.idName + '=' + $(  _getParent( that ) ).attr( 'id' );
				}else{
					// 在td中到出id
					idArgs = condition.idName + '=' + $( that ).attr( 'id' );
				}
				var _input = this;
				// 把url后台的参数都解析出来
				var sendArgs = '';
				if( _url.args == '' ){
					sendArgs = condition.argName + '=' + newVal + '&' + idArgs + readyArgs;
				}else{
					sendArgs = _url.args + '&' + condition.argName + '=' + newVal + '&' + idArgs + readyArgs;
				}
				$.ajax({
					url : encodeURI(_url.URL ),
					type : 'POST',
					cache : false,
					data : sendArgs,
					success : function( result ){
						try{
							// 通过javascript对象把返回的结果转为javascript对象
							var jsonMsgObj=new JsonMsgObj(result);
							// 通过getMessage()得到返回的异常信息,此异常信息为json格式
							var  msg=jsonMsgObj.getMessage();
							var isOk=jsonMsgObj.getIsok();
							// 如果修改成功 , 就修改页面
							if( isOk ){
								$( that ).append( document.createTextNode( $.trim( newVal ) ) );
								$( _input ).remove();
								if( typeof( condition.success )!='undefined' 
									&& null != condition.success 
									&& condition.success.constructor == Function ){
									condition.success.call( that );
								}
							}else{
								$( _input ).remove();
								$( that ).append( document.createTextNode( $.trim( valBefore ) ) );
								aerouiAlert( msg );
							}
						}catch(e){
							document.write( result );
						}
					},
					error : function( result ){
						if( typeof( condition.fail )!='undefined' 
							&& null != condition.fail 
							&& condition.fail.constructor == Function ){
							condition.fail.call( that );
						}
						// 如果提交过程中发生了错误，就修改回以前的值
						aerouiAlert( result );
						$( _input ).remove();
						$( that ).append( document.createTextNode( $.trim( valBefore ) ) );
					},
					beforeSend : function( request ){
						if( typeof( condition.beforeSend )!='undefined' 
							&& null != condition.beforeSend 
							&& condition.beforeSend.constructor == Function ){
							condition.beforeSend.call( _input );
						}
					}
				});
			}
			// 取消事件冐泡与扩散
//			inFstop();
//			inFabort();
		} );
	}
}


function myEeditCellAjax( condition ){
	// 如果没有参数就返回
	if( typeof( condition )=='undefined' ){
		return;
	}
	// 生成修改的控件
	$( '.'+condition.className ).each( function(){
		$( this ).dblclick( ajaxEditcell );
	} );
	 function ajaxEditcell(){
		// 判断此单元格是否已处于编辑状态了
		// 是否已修改于编辑状态是按此元素的子节点中是否存在可编辑的文本来进行判断的
		// 属性集合
		var attrs = new Array();
		// map
		attrs['type']='text';
		// 取出指定类型的子节点
		var childs = getChildByType( this , 'input' , attrs );
		// 是否已处于edit的状态 
		var isedit = false;
		for( var i=0;i<childs.length;i++ ){
			if( $( childs[i] ).attr( 'class' )=='td_input_edit' ){
				isedit = true;
				break;
			}
		}
		// 记录td的上下文
		var that = this;
		// 调用准备的方法
		// 准备过程中提供的参数
		var readyArgs = '';
		if( typeof( condition.ready )!='undefined' && null != condition.ready && condition.ready.constructor == Function ){
			var _ready = condition.ready.call( that );
			// 判断是否继续
			if( !_ready.edit ){
				return;
			}
			if( _ready.args != '' ){
				readyArgs = '&' + _ready.args;
			}
		}
		// 如果处于edit状态就返回
		if( isedit ){ return; }
		// 如果不处于edit状态就继续向下执行
		var valBefore = $.trim( $(this).text() );
		var input = document.createElement('input');
		// 设置此input的class
		$( input ).attr( 'class' , 'td_input_edit' )
		$( input ).css( {
			border : '1px dotted khaki',
			width : '80%',
			padding: '0px',
			margin: '0px',
			background: 'transparent'
		} );
		// 初始化input的值为td的值
		input.value = valBefore;
		// 删除所有文本节点
		//removeChildTxtNode( this );
		
		//update by liagnchao 2010-7-14
		// 删除所有节点
		$(that).empty();
		//end by liangchao
		
		
		// 添加所有的文本节点
		this.appendChild( input );
		$(input).select();
		// 处理input的blur事件
		$( input ).blur( function(){
			// 取出修改之后新值
			var newVal = $( this ).val();
			// 调用最值的验证方法
			
			//update by liangchao 2010-8-14 如果值未修改则不执行验证方法
			if($.trim( valBefore ) != $.trim( newVal )) {			
				if( typeof( condition.validate )!='undefined' 
						&& null != condition.validate 
						&& condition.validate.constructor == Function ){
					var _validate = condition.validate.call( this);
					// 如果没有通过，就把input text remove 设置td 的tooltips
					if( !_validate ){
						$( that ).append( document.createTextNode( $.trim( newVal ) ) );
						$( this ).remove();
						return;
					}
				}
			} else {
				//add by liangchao 2010-7-14 如果编辑前后值相等并且值为负数则显示红色
				if($.trim( newVal )<0) {
					try {
						//<span style="color: red;">
						//创建span节点
						var span = document.createElement('span');
						//为span节点设置样式
						$( span ).attr( 'style' , 'color: red' );
						//将创建的input节点绑定到span上
						$( span ).append( document.createTextNode( $.trim( newVal ) ) );
						$( this ).remove();
						//将span绑定到td上
						$(that).append( span );
					}catch(e) {
						alert(e.name+" "+e.message);
					}
					return;	
				}
			}
			/*以前代码*/
//			if( typeof( condition.validate )!='undefined' 
//					&& null != condition.validate 
//					&& condition.validate.constructor == Function ){
//				var _validate = condition.validate.call( this);
//				// 如果没有通过，就把input text remove 设置td 的tooltips
//				if( !_validate ){
//					$( that ).append( document.createTextNode( $.trim( newVal ) ) );
//					$( this ).remove();
//					return;
//				}
//			}
			//end by liangchao	
			// 如果新值与旧值相等就不再后台保存 , 把值还原
			if( $.trim( valBefore ) == $.trim( newVal ) ){
				$( that ).append( document.createTextNode( $.trim( newVal ) ) );
				$( this ).remove();
				if( typeof( condition.noModify )!='undefined' 
					&& null != condition.noModify 
					&& condition.noModify.constructor == Function ){
					condition.noModify.call( that );
				}
			// 如果新值与旧值不相同就发送到后台 , 如果保存成功就设置为新值 , 反之就设置为旧值
			}else{
				// 取出要向后台发送的url
				var _url = parseURL( condition.url );
				// 判断主键所有位置 , 默认为tr
				var idPos = 'tr';
				if( condition.idPosition == 'td' ){
					idPos = 'td';
				}
				// 后台id对应的名
				var idArgs = "";
				if( idPos == 'tr' ){
					// 在tr中取出id
					idArgs = condition.idName + '=' + $(  _getParent( that ) ).attr( 'id' );
				}else{
					// 在td中到出id
					idArgs = condition.idName + '=' + $( that ).attr( 'id' );
				}
				var _input = this;
				// 把url后台的参数都解析出来
				var sendArgs = '';
				if( _url.args == '' ){
					sendArgs = condition.argName + '=' + newVal + '&' + idArgs + readyArgs;
				}else{
					sendArgs = _url.args + '&' + condition.argName + '=' + newVal + '&' + idArgs + readyArgs;
				}
				$.ajax({
					url : encodeURI(_url.URL ),
					type : 'POST',
					cache : false,
					data : sendArgs,
					success : function( result ){
						try{
							// 通过javascript对象把返回的结果转为javascript对象
							var jsonMsgObj=new JsonMsgObj(result);
							// 通过getMessage()得到返回的异常信息,此异常信息为json格式
							var  msg=jsonMsgObj.getMessage();
							var isOk=jsonMsgObj.getIsok();
							// 如果修改成功 , 就修改页面
							if( isOk ){
								$( that ).append( document.createTextNode( $.trim( newVal ) ) );
								$( _input ).remove();
								if( typeof( condition.success )!='undefined' 
									&& null != condition.success 
									&& condition.success.constructor == Function ){
									condition.success.call( that );
								}
							}else{
								$( _input ).remove();
								$( that ).append( document.createTextNode( $.trim( valBefore ) ) );
								aerouiAlert( msg );
							}
						}catch(e){
							document.write( result );
						}
					},
					error : function( result ){
						if( typeof( condition.fail )!='undefined' 
							&& null != condition.fail 
							&& condition.fail.constructor == Function ){
							condition.fail.call( that );
						}
						// 如果提交过程中发生了错误，就修改回以前的值
						aerouiAlert( result );
						$( _input ).remove();
						$( that ).append( document.createTextNode( $.trim( valBefore ) ) );
					},
					beforeSend : function( request ){
						if( typeof( condition.beforeSend )!='undefined' 
							&& null != condition.beforeSend 
							&& condition.beforeSend.constructor == Function ){
							condition.beforeSend.call( _input );
						}
					}
				});
			}
			// 取消事件冐泡与扩散
//			inFstop();
//			inFabort();
		} );
	}
}

/**
 * 解析URL，把它修改为url与参数对的对象
 * @param url 
 * url样式 updateAction!deleteSth.action?sth.id=myid&name=javascript
 * @return {
 * 	URL : updateAction!deleteSth.action,
 * 	args : sth.id=myid&name=javascript
 * }
 */
function parseURL( _url ){
	return {
		URL : _url.split('?')[0],
		args : _url.split('?').length>1 ? _url.split('?')[1] : ''
	}
}


/*
 * 处理json的提示信息,要把每一个提示信息都在相应控件的后台进行展示
 * 返回的提示信息格式，按表现层异常处理规范体现
 * @param codeid 是从后台到前台的异常标记
 * @param msg 是异常信息
 * @param prefix 是因为页面可能有多个重复的id，所以要求有前缀
 */
function jsHandleException( codeId , msg , prefix){
	// 如果codeid为-1那么就是在后台的验证时发生了异常，
	// 对于验证的异常处理方式为以key得到了element，再以tooltips的方式来显示出信息
	try{
		
		var pre = '';
		if( typeof( prefix ) != 'undefined' ){
			pre = prefix;
		}
		if( codeId == aeroui.constant.validateException ){
			// 处理json的提示信息,要把每一个提示信息都在相应控件的后台进行展示
			// 返回的提示信息格式，按表现层异常处理规范体现
			var validateMsg = window.eval('('+ msg +')');
			for(var m in validateMsg){
				new aeroui.tooltips( document.getElementById( pre + m ) , validateMsg[m] );
			}
		}else{
			window.alert( msg );
		}
	}catch(e){
		// 如果发生了js的异常
		aerouiAlert( msg );
	}
}
/*
 * 处理提交之后的所有信息
 * @param result ajax返回的信息
 * @param 如果没有发生异常时调用的方法
 * @param 为了避免id冲突而使用的前缀
 */
function JsManageInfoHandleException( result , successFun , prefix , failFun){
	// 注意如果发生了没有定义的异常时，如何进行处理，要此进的异常信息为一大段的html文本
	try{
		// 通过javascript对象把返回的结果转为javascript对象
		var jsonMsgObj=new JsonMsgObj(result);
		// 通过getMessage()得到返回的异常信息,此异常信息为json格式
		var  msg=jsonMsgObj.getMessage();
		// 如果为-1就是验证异常
		var codeId=jsonMsgObj.getCodeid();
		var isOk=jsonMsgObj.getIsok();
		// 判断是否插入成功了
		if( isOk ){
			//执行成功之后的方法
			if( typeof( successFun )!='undefined' && successFun.constructor == Function ){
				successFun(msg , codeId , isOk);
			}
		// 如果插入没有成功时
		}else{
			// 如果没有成功，就处理异常
			var _prefix = '';
			if( typeof( prefix )!='undefined' ){
				_prefix = prefix;
			}
			jsHandleException( codeId , msg , _prefix);
			// 失败的回调方法
			if( typeof( failFun )!='undefined' && failFun.constructor == Function ){
				failFun(msg , codeId , isOk);
			}
		}
	}catch(e){
		document.write( result );
	}
}
/*
 * 最新的aeroui的alert方法
 */
function aerouiAlert( msg ){
	var ss = msg.split(";");
	var temp="" ;
	for(var i=0;i<ss.length;i++){
		temp += ss[i]+"\n";
	}
	window.alert( temp );
}

/**
 * 最新的aeroui的confirm方法
 */
function aerouiConfirm( msg ){
	return window.confirm( msg );
}
/*
 * 显示/隐藏切换方法
 */
function show(_id){
	$('#'+_id).slideToggle('normal');
}
/* 取随机字符串 */
aeroui.random = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
function getRandom(){
	var randomName = '';
	var count = parseInt(Math.random()*20)+1;
	for(var i=0;i<count;i++){
		randomName += aeroui.random[parseInt(Math.random()*count)];
	}
	return randomName;
}
/* toggle是启用还是禁用 */
function toggleDisable( elem ){
	var _elem;
	if( typeof( elem ) == 'string' ){
		_elem = $( '#'+elem );
	}
	if( typeof( elem.jquery ) != 'undefined' ){
		_elem = $( elem[0] );
	}
	if( typeof( elem )=='object' ){
		_elem = $( elem );
	}
	function toggle(){
		if( $( _elem ).attr( 'disabled' ) !='disabled' ){
			$( _elem ).attr( 'disabled' , 'disabled' );
		}else{
			$( _elem ).attr( 'disabled' , '' );
		}
	}
	toggle();
}
/**
 * 重新设置元素的样式
 * @param elem 元素
 * @param csses = {
 * 		key : value,
 * 		....
 * }
 * @return 返回修改之前的css样式
 */
function resetCss( elem , csses ){
	var old = {};
	for( var i in csses ){
		old[i] = $( elem ).css( i );
		$( elem ).css( i , csses[i] );
	}
	return old;
}
/**
 * 恢复以前的css样式
 * @param elem 元素
 * @param csses = {
 * 		key : value,
 * 		....
 * }
 */
function restoreCss( elem , csses ){
	for( var i in csses ){
		$( elem ).css( i , csses[i] );
	}
}
// 要求得到的条件为提交btn的id与form的id与form的回调方法
i = {};
/**
 * @param btnId 提交的button
 * @param formId 提交的表单
 * @param afterCall 提交success之后执行的方法
 * @param beforeCall 提交之前执行的方法
 * @param failCall 提交失败之后执行的方法
 * @param ready 进行提交的第一个准备方法，也就是第一个执行的方法
 * 在ready的方法中返回一个对象，此对象的返回格式为
 * return {
 * 		submit : true,
 * 		args : [ 'name=value','name1=value1',.... ]
 * }
 * @param validateFail 验证失败之后的回调
 *  
 */
i.formSubmit = function(btnId , formId , afterCall , ready , beforeCall , failCall , validateFail){
	// ie6中form表单可以在子节点得到焦点时，通过enter键进行提交，以下设置是禁用此方法的提交
	$( '#'+formId ).submit( function(){
		return false;
	} );
	// 查看是否重复提交
	var submiting = true;
	var btnVal = $( '#'+btnId ).val();
	var old;
	$('#'+btnId).click(function(){
		$( '#'+btnId ).val( '' );
		old = resetCss( $( '#'+btnId ) , {
			backgroundImage : "url('common/img/wait.gif')",
			backgroundPosition : 'center',
			backgroundRepeat : 'no-repeat',
			border : '0px'
		} );
		if( !submiting ){
			return;
		}
		submiting = false;
		// 建立一个用于得到节点的name与value的数组
		var name_value = new Array();
		// 处理ready方法
		// 在此定义准备时的参数列表以name=value的方式
		if( typeof( ready )!='undefined' && ready.constructor == Function ){
			// 调用ready方法，此方法返回一个对象 ，此对象第一个属性为是否向下执行此方法，第二个对象是返回一个要动态添加的参数键值对
			var result = ready();
			// 返回的对象的第一个属性就是submit，为boolean类型，如果为true就进行提交，如果返回false就不再提交了
			if( !result.submit ){
				notSubmitAgain();
				return;
			// 如果返回的第一个参数为true就进行提交
			}else{
				name_value.addAll( result.args );
			}
		}
		// 得到form表单下的所有节点
		// 取得所有可提交的对象 也就是指在button与submit与reset之外的所有对象
		$.each($('#'+formId+' input , #'+formId+' select , #'+formId+' textarea') , function(){
			if($(this).attr('type')!='button' && $(this).attr('type')!='submit' && $(this).attr('type')!='reset'){
				// $(this).css("border" , "1px solid red");
				// 取出表单对象下的可提交元素的name与value
				var _name = $(this).attr('name');
				var _value = $(this).attr('value');
				if( ''!=_name ){
					// 取出name与value数组
					var nodeArr = new Array();
					nodeArr.push(_name);
					_value = _value.split('');
					for( var i=0;i<_value.length;i++ ){
						if( aeroui.constant.specialChar[ _value[i] ] ){
							_value[i] = aeroui.constant.specialChar[ _value[i] ];
						}
					}
					_value = _value.join('');
					nodeArr.push(_value);
					// 添加到总的数组中
					name_value.push(nodeArr.join("="));
				}
			}
		});
		// 提交表单
		// 得到数据
		var _data = name_value.join("&");
		// 得到form表单的action 
		var _action = $('#'+formId).attr('action');
		 $.ajax({
		   type: "POST",
		   url: _action,
		   data : _data,
		   success: innerAfterCall,
		   error : innerFailCall,
		   beforeSend : innerBeforeCall
		});
	});
	function innerFailCall( result ){
		notSubmitAgain();
		failCall( result );
	}
	function innerAfterCall( result ){
		notSubmitAgain();
		afterCall( result );
	}
	// 进行数据的验证，把验证方法内置到提交方法中
	innerBeforeCall = function(){
		/*
		 * 表单验证的要求，要求得到一个返回值来确定是否验证成功；
		 */
		// $('#'+formId).validationEngine();
		var validateResult = $('#'+formId).validate(formId);
		
		// beforeCall();
		try {
			if( !validateResult ){
				notSubmitAgain();
				if( typeof( validateFail )!='undefined' && validateFail.constructor == Function ){
					validateResult=validateFail();
				}
			}
		}catch(e) {
		}	
		
		if(validateResult) {
			// beforeCall();
			if(null != beforeCall && beforeCall.constructor == Function){
				beforeCall();
			}
		}
		return validateResult;
	}
	function notSubmitAgain(){
		submiting = true;
		$( '#'+btnId ).val( btnVal );
		$( '#'+btnId ).css( {
			backgroundAttachment : 'scroll',
			backgroundColor : 'transparent',
			backgroundImage : 'url(common/img/btn/btn_link.gif)',
			backgroundRepeat : 'repeat-x',
			backgroundPosition : 'left top'
		} );
	}
}
/**
 * 把一个table序列化
 * 如果table中的td的id存在，并td中有文本信息，那就把id与文本信息以如下方式拼装
 * 如果td没有id，但是有可用的子节点，那也对此信息进行序列化
 * id1:val , id2:val , ....
 * 
 * html的代码如下 ：
 * <table>
 * 	<thead>
 * 		<tr>
 * 			<td>此信息不被序列化</td>
 * 		</tr>
 * </thead>
 * <tbody>
 * 		<tr>
 * 			<td id="aaa">此信息可被序列化</td>
 * 			<td>此信息不被序列化</td>
 * 			<td>
 * 				<input type="something"/>此信息被序列化
 * 			</td>
 * 			<td>
 * 				<input id="ss" type="something"/>此信息被序列化
 * 				<input id="s" type="something"/>此信息不被序列化
 * 			</td>
 * 		</tr>
 * </tbody>
 * </table>
 * @param table 要序列化的table
 */
function serialiseTable( table ){
	var _table = null;
	// 如果没有定义
	if( typeof( table )=='undefined' ){
		return;
	}
	// 如果传入的是id
	if( typeof( table )=='string' ){
		_table = document.getElementById( table );
	}
	// 如果是对象
	if( typeof( table )=='object' ){
		// 如果是jquery的对象
		if( typeof( table.jquery )!='undefined' ){
			_table = $( table )[0];
		// 如果不是jquery的对象
		}else{
			_table = table;
		}
	}
	// 如果最后还为null，就返回
	if( null == _table ){
		return;
	}
	// 取出所有的table的td节点
	var tds = _table.getElementsByTagName('td');
	// 判断此tds中的td信息
	var tdInfo = new Array();
	for( var i=0;i<tds.length;i++ ){
		// 判断此元素是否有id属性
		// 如果有id属性
		if( "" != $( tds[i] ).attr('id')  ){
			// 把id不为空的信息放到可处理的集合中 
			tdInfo.push( tds[i] );
		
		// 判断id属性为空，就再判断是否有可用的文本信息
		}else if( "" != _getText( tds[i] ) && _getChilds( tds[i] ).length > 0 ){
			// 添加到可处理集合
			tdInfo.push( tds[i] );
		}
	}
	// 把集合中的所有元素以id:value的方法
	var serialInfo = new Array();
	for( var i=0;i<tdInfo.length;i++ ){
		// 形成id：value的格式
		serialInfo.push( serialiseElem( tdInfo[i] ) );
	}
	return serialInfo.join( ',' );
}

/**
 * 序列化单个元素，把信息以id:value的方式返回
 * @param elem
 * @return id:value
 */
function serialiseElem( elem ){
	// 如果为null就返回一个“”；
	if( null == elem ){
		return "";
	}
	var id = $( elem ).attr( 'id' );
	// 如果id不为空
	if( "" != id ){
		// 返回
		return id + ":" + getValue( elem );
	
	// 如果没有id，就去取子节点的信息
	}else{
		var child = _getChilds( elem )[0];
		if( "" != $( child ).attr( 'id' ) ){
			return $( child ).attr( 'id' ) + ":" + getValue( child );
		}
	}
	return "";
}
//add by liangchao 
/**
 * 按tr分割每行是一个对象用",#,"分割
 */
function serialiseTableByTr( table ){
	var _table = null;
	// 如果没有定义
	if( typeof( table )=='undefined' ){
		return;
	}
	// 如果传入的是id
	if( typeof( table )=='string' ){
		_table = document.getElementById( table );
	}
	// 如果是对象
	if( typeof( table )=='object' ){
		// 如果是jquery的对象
		if( typeof( table.jquery )!='undefined' ){
			_table = $( table )[0];
		// 如果不是jquery的对象
		}else{
			_table = table;
		}
	}
	// 如果最后还为null，就返回
	if( null == _table ){
		return;
	}
	// 取出所有的table的td节点
	var tds = _table.getElementsByTagName('td');
	//获取所有的table的tr
	var trs = _table.getElementsByTagName('tr');
	var tdInfo = new Array();
	for(var i=0;i<trs.length;i++) {
		//取得tr下的所有td
		var trObj=trs[i];
		//去除一部分垃圾数据，不需要保存的tr值
		if("editdata"==$(trObj).attr('class')) {
			var childs=_getChilds(trObj);
			// 判断此tds中的td信息
			for( var k=0;k<childs.length;k++ ){
				// 判断此元素是否有id属性
				// 如果有id属性
				if( "" != $( childs[k] ).attr('id')  ){
					// 把id不为空的信息放到可处理的集合中 
					tdInfo.push( childs[k] );
				
				// 判断id属性为空，就再判断是否有可用的文本信息
				}else if( "" != _getText( childs[k] ) && _getChilds( childs[k] ).length > 0 ){
					// 添加到可处理集合
					tdInfo.push( childs[k] );
				}
			}
			//一行结束加个标识
			tdInfo.push(null);
		}	
	}
	// 把集合中的所有元素以id:value的方法
	var serialInfo = new Array();
	for( var i=0;i<tdInfo.length;i++ ){
		// 形成id：value的格式
		serialInfo.push( serialiseElem( tdInfo[i] ) );
	}
	return serialInfo.clearNull().join( ',' );
}

/**
 * 序列化单个元素，把信息以id:value的方式返回
 * @param elem
 * @return id:value
 */
function serialiseElem( elem ){
	// 如果为null就返回一个“”；
	if( null == elem ){
		return "#";
	}
	var id = $( elem ).attr( 'id' );
	// 如果id不为空
	if( "" != id ){
		// 返回
		if(getValue( elem )!='') {
			return id + ":" + getValue( elem );
		}
	// 如果没有id，就去取子节点的信息
	}else{
		var child = _getChilds( elem )[0];
		if( "" != $( child ).attr( 'id' ) ){
			if(getValue( child )!='') {
				return $( child ).attr( 'id' ) + ":" + getValue( child );
			}
		}
	}
	return "";
}
//end by liangchao 




/**
 * 取出value的通用方法
 * 可以取出value与text两种类型的值
 */
function getValue( elem ){
	// 取出文本信息
	var txt = ''; 
	// 如果此节点为input type=radio
	// 如果是value形式的
	if( typeof( $( elem ).val() ) != 'undefined' && "" != $( elem ).val() ){
		txt =  $.trim( $( elem ).val() );
	// 如果是text的形式	
	}else if( typeof( $( elem ).text() ) != 'undefined' ){
		txt =  $.trim( $( elem ).text() );
	}
	return txt;
}
/**
 * 序列化单个元素，把信息以id:value的方式返回
 * @param elem
 * @return id:value
 */
function serialiseArray( array ){
	var arrOut = new Array();
	for( var i=0;i<array.length;i++ ){
		var arrInner = new Array();
		var elem = array[i];
		for( var key in elem ){
		    if(typeof(elem[key]) == "string"){
	 			arrInner.push( "\""+key + "\":\"" + elem[key]+"\"" );
		    }else{
		    	arrInner.push( "\""+key + "\":" + elem[key] );
		    }
		}
		arrOut.push('{' + arrInner.join(",") + '}');
	}
	return '[' + arrOut.join(",") + ']';
}
/**
 * 异步文件上传的回调方法
 * @param id iframe的id
 * @param success 成功之后的回调方法
 * @param fail 失败之后的回调方法
 */ 
 function ajaxUploadFileCallBack( id , success , fail ){
 	var i = document.getElementById(id);
	if (i.contentDocument) {
		var d = i.contentDocument;
	} else if (i.contentWindow) {
		var d = i.contentWindow.document;
	} else {
		var d = window.frames[id].document;
	}
	if (d.location.href == "about:blank") {
		return;
	}
	if ( ''==d.body.innerHTML || '<pre></pre>'==d.body.innerHTML || '<PRE></PRE>'==d.body.innerHTML ){
		alert("成功");
		if( typeof( success )!='undefined' && success.constructor == Function ){
			success();
		}
	}else{
		var msg = d.getElementById('error_msg_id');
		alert( msg.innerHTML );
		if( typeof( fail )!='undefined' && fail.constructor == Function ){
			fail();
		}
	}
 }
 /* 覆盖并显示出进度条 */
createLayOver = function(){
	var div = document.createElement('div');
	div.id = 'layOver';
	div.style.left = '0px';
	div.style.top = '0px';
	div.style.width = window.document.body.clientWidth - 20;
	div.style.height = window.document.body.clientHeight - 20;
	div.style.position = 'absolute';
	div.style.backgroundImage = "url('common/img/blue-loading.gif')";
	div.style.backgroundPosition = 'center';
	div.style.backgroundRepeat = 'no-repeat';
	if(document.all)
	{
		div.style.filter = 'alpha(opacity=80)';
	}else
	{
		div.style.opacity = 0.8;
	}
	div.style.zIndex = 10000;
	document.body.appendChild(div);
	$( div ).bgiframe();
}
/* 去除进度条 */
removeLayOver = function(){
	var div = document.getElementById('layOver');
	if(div != null)
	{
		document.body.removeChild(div);
	}
}